/**
 * tabBar页面路径列表 (用于链接跳转时判断)
 * tabBarLinks为常量, 无需修改
 */

const tabBarLinks = [
  'pages/index/index',
  'pages/user/index/index',
]

// 工具函数
import {
  httpRequest as http,
  showLoading,
  hideLoading,
  showToast,
  showToastSuccess,
  showModal,
} from 'common'

// 站点配置
import config from './config'

// 工具类
// import util from './utils/util.js'

// import Toast from '@vant/weapp/toast/toast';



App({
  // 工具函数
  http,
  showLoading,
  hideLoading,
  showToast,
  showToastSuccess,
  showModal,

  // 站点配置
  config,
  // 微信接口访问路径配置
  baseUrl: config.baseUrl,
  ApiRoot: config.ApiRoot,

  // 全局变量
  globalData: {
    user_id: null,
    user_s: 0,
    // 胶囊位置
    navBarHeight: 0, // 导航栏高度
    menuRight: 0, // 胶囊距右方间距（方保持左、右间距一致）
    menuBotton: 0, // 胶囊距底部间距（保持底部间距一致）
    menuHeight: 0, // 胶囊高度（自定义内容可与胶囊高度保证一致）

    screenHeight: 0, //获取屏幕高度
    statusBarHeight: 0, //获取状态栏高度
    navBarHeight: 0, //获取导航栏高度
  },

  /**
   * 生命周期函数--监听小程序初始化
   */
  onLaunch(e) {
    // 小程序主动更新
    this.updateManager()
    // 小程序启动场景
    this.onStartupScene(e.query)
    // 胶囊布局信息
    this.getMenuButtonInfo()
    // 获取系统信息  
    wx.getSystemInfo({
      success: (res) => {
        // 获取屏幕高度
        this.screenHeight = res.screenHeight
        // 获取状态栏高度
        this.statusBarHeight = res.statusBarHeight
        // 通过操作系统 确定自定义导航栏高度  
        if (res.system.substring(0, 3) == "iOS") {
          this.navBarHeight = 42
        } else {
          this.navBarHeight = 44
        }
      }
    })
  },






  // 胶囊布局信息
  getMenuButtonInfo() {
    // 获取系统信息
    const systemInfo = wx.getSystemInfoSync()
    // 胶囊按钮位置信息
    const menuButtonInfo = wx.getMenuButtonBoundingClientRect()
    // 导航栏高度 = 状态栏到胶囊的间距（胶囊距上距离-状态栏高度） * 2 + 胶囊高度 + 状态栏高度
    this.globalData.navBarHeight = (menuButtonInfo.top - systemInfo.statusBarHeight) * 2 + menuButtonInfo.height + systemInfo.statusBarHeight
    this.globalData.menuRight = systemInfo.screenWidth - menuButtonInfo.right
    this.globalData.menuBotton = menuButtonInfo.top - systemInfo.statusBarHeight
    this.globalData.menuHeight = menuButtonInfo.height
  },

  /**
   * 小程序启动场景
   */
  onStartupScene(query) {
    // 获取场景值
    let scene = this.getSceneData(query);
    // 记录推荐人id
    let refereeId = query.referee_id ? query.referee_id : scene.uid;
    refereeId > 0 && (this.saveRefereeId(refereeId));
  },


  /**
   * 当小程序启动，或从后台进入前台显示，会触发 onShow
   */
  onShow(options) {
    // 获取小程序基础信息
    // this.getWxappBase();
  },

  /**
   * 当前用户id
   */
  getUserId() {
    return config.testUserId ? config.testUserId : wx.getStorageSync('user_id')
  },
  /**
   * 获取场景值(scene)
   */
  getSceneData(query) {
    return query.scene ? util.scene_decode(query.scene) : {};
  },
  /**
   * 小程序主动更新
   */
  updateManager() {
    if (!wx.canIUse('getUpdateManager')) {
      return false;
    }
    const updateManager = wx.getUpdateManager();
    updateManager.onCheckForUpdate(function (res) {
      // 请求完新版本信息的回调
      // console.log(res.hasUpdate)
    });
    updateManager.onUpdateReady(function () {
      wx.showModal({
        title: '更新提示',
        content: '新版本已经准备好，即将重启应用',
        showCancel: false,
        success(res) {
          if (res.confirm) {
            // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
            updateManager.applyUpdate()
          }
        }
      });
    });
    updateManager.onUpdateFailed(function () {
      // 新的版本下载失败
      wx.showModal({
        title: '更新提示',
        content: '新版本下载失败',
        showCancel: false
      })
    });
  },

  /**
   * 获取tabBar页面路径列表
   */
  getTabBarLinks() {
    return tabBarLinks;
  },

  /**
   * 跳转到指定页面
   * 支持tabBar页面
   */
  navigationTo(url) {
    if (!url || url.length == 0) {
      return false;
    }
    let tabBarLinks = this.getTabBarLinks();
    // tabBar页面
    if (tabBarLinks.indexOf(url) > -1) {
      wx.switchTab({
        url: '/' + url
      });
    } else {
      // 普通页面
      wx.navigateTo({
        url: '/' + url
      });
    }
  },

  /**
   * 生成转发的url参数
   */
  getShareUrlParams(params) {
    let _this = this;
    return util.urlEncode(Object.assign({
      referee_id: _this.getUserId()
    }, params));
  },

  // ####################################################################################################
  // # 自定义请求方法封装
  // ####################################################################################################

  // 设置顶部导航栏
  setPageBar(page) {
    // 设置页面标题
    wx.setNavigationBarTitle({
      title: page.params.title
    });
    // 设置navbar标题、颜色
    wx.setNavigationBarColor({
      frontColor: page.style.titleTextColor === 'white' ? '#ffffff' : '#000000',
      backgroundColor: page.style.titleBackgroundColor,
    })
    // 下拉背景字体
    wx.setBackgroundTextStyle({
      textStyle: 'dark'
    })
    // 窗口的背景色
    wx.setBackgroundColor({
      backgroundColor: '#c42356',
    })
  },

  // ####################################################################################################
  // # 添加抖音短视频
  // ####################################################################################################

  saveDouyinVideo(resolve, reject) {
    try {
      wx.getClipboardData({
        success: res => {
          let val = res.data
          if (val.indexOf('https://v.douyin.com/') !== -1) {
            this.request(this.config.saveDouyinVideo, {
              link: val
            }, 'POST', 'nav', res => {
              if (res.status === 200) {
                resolve(res.data.id)
              } else {
                this.showToast(res.msg);
              }
            })
          }
        }
      })
    } catch (e) {
      this.showToast("请求失败,请稍后再试", 2000)
    }
  },



  // ##########################################################################################

  // 获取胶囊信息
  getMenuButtonLayout() {
    var menuButtonInfo = this.globalData.menuButtonInfo
    if (menuButtonInfo != null) {
      return menuButtonInfo
    } else {
      try {
        const menuButtonInfo = wx.getMenuButtonBoundingClientRect()
        this.globalData.menuButtonInfo = menuButtonInfo
        return menuButtonInfo
      } catch (error) {
        var _menuButtonInfo2 = {
          width: 0,
          height: 30,
          top: 40,
          right: 0,
          bottom: 0,
          left: 0
        }
        return _menuButtonInfo2
      }
    }
  },

  // ##########################################################################################



});